Compare commits
1 Commits
main
...
dependabot
Author | SHA1 | Date | |
---|---|---|---|
![]() |
bf22ba3db0 |
66
.github/workflows/docker-image.yml
vendored
66
.github/workflows/docker-image.yml
vendored
@ -4,23 +4,20 @@ on:
|
|||||||
branches: main
|
branches: main
|
||||||
|
|
||||||
jobs:
|
jobs:
|
||||||
build-platform:
|
buildx:
|
||||||
runs-on: ubuntu-latest
|
runs-on: ubuntu-latest
|
||||||
strategy:
|
|
||||||
matrix:
|
|
||||||
platform: [linux/amd64, linux/arm/v7, linux/arm64/v8]
|
|
||||||
|
|
||||||
steps:
|
steps:
|
||||||
- name: Checkout
|
-
|
||||||
|
name: Checkout
|
||||||
uses: actions/checkout@v4
|
uses: actions/checkout@v4
|
||||||
|
-
|
||||||
- name: Set up QEMU
|
name: Set up QEMU
|
||||||
uses: docker/setup-qemu-action@v3
|
uses: docker/setup-qemu-action@v3
|
||||||
|
-
|
||||||
- name: Set up Docker Buildx
|
name: Set up Docker Buildx
|
||||||
uses: docker/setup-buildx-action@v3
|
uses: docker/setup-buildx-action@v3
|
||||||
|
-
|
||||||
- name: Cache Docker layers
|
name: Cache Docker layers
|
||||||
uses: actions/cache@v4
|
uses: actions/cache@v4
|
||||||
id: cache
|
id: cache
|
||||||
with:
|
with:
|
||||||
@ -28,44 +25,27 @@ jobs:
|
|||||||
key: ${{ runner.os }}-buildx-${{ github.sha }}
|
key: ${{ runner.os }}-buildx-${{ github.sha }}
|
||||||
restore-keys: |
|
restore-keys: |
|
||||||
${{ runner.os }}-buildx-
|
${{ runner.os }}-buildx-
|
||||||
|
-
|
||||||
- name: Login to DockerHub
|
name: Login to DockerHub
|
||||||
uses: docker/login-action@v3
|
uses: docker/login-action@v3
|
||||||
with:
|
with:
|
||||||
username: ${{ secrets.DOCKER_USERNAME }}
|
username: ${{ secrets.DOCKER_USERNAME }}
|
||||||
password: ${{ secrets.DOCKER_PASSWORD }}
|
password: ${{ secrets.DOCKER_PASSWORD }}
|
||||||
|
- name: Build and push
|
||||||
- name: Prepare Platform Tag
|
|
||||||
id: platform_tag
|
|
||||||
run: echo "platform_tag=$(echo ${{ matrix.platform }} | sed 's|/|-|g')" >> $GITHUB_ENV
|
|
||||||
|
|
||||||
- name: Build and push platform-specific image
|
|
||||||
uses: docker/build-push-action@v5
|
uses: docker/build-push-action@v5
|
||||||
with:
|
with:
|
||||||
context: .
|
context: .
|
||||||
platforms: ${{ matrix.platform }}
|
platforms: linux/arm/v7,linux/amd64
|
||||||
push: true
|
push: true
|
||||||
tags: albertoxamin/bang:${{ env.platform_tag }}
|
tags: albertoxamin/bang:latest
|
||||||
cache-from: type=registry,ref=albertoxamin/bang:${{ env.platform_tag }}
|
cache-from: type=registry,ref=user/app:latest
|
||||||
cache-to: type=inline
|
cache-to: type=inline
|
||||||
|
|
||||||
create-manifest:
|
- name: Notify discord
|
||||||
runs-on: ubuntu-latest
|
uses: th0th/notify-discord@v0.4.1
|
||||||
needs: build-platform
|
if: ${{ always() }}
|
||||||
steps:
|
env:
|
||||||
- name: Set up Docker Buildx
|
DISCORD_WEBHOOK_URL: ${{ secrets.DISCORD_WEBHOOK_URL }}
|
||||||
uses: docker/setup-buildx-action@v3
|
GITHUB_ACTOR: ${{ github.actor }}
|
||||||
|
GITHUB_JOB_NAME: "Docker image main :latest"
|
||||||
- name: Login to DockerHub
|
GITHUB_JOB_STATUS: ${{ job.status }}
|
||||||
uses: docker/login-action@v3
|
|
||||||
with:
|
|
||||||
username: ${{ secrets.DOCKER_USERNAME }}
|
|
||||||
password: ${{ secrets.DOCKER_PASSWORD }}
|
|
||||||
|
|
||||||
- name: Create and push multi-arch manifest
|
|
||||||
run: |
|
|
||||||
docker buildx imagetools create \
|
|
||||||
--tag albertoxamin/bang:latest \
|
|
||||||
albertoxamin/bang:linux-amd64 \
|
|
||||||
albertoxamin/bang:linux-arm-v7 \
|
|
||||||
albertoxamin/bang:linux-arm64-v8
|
|
||||||
|
@ -122,7 +122,6 @@ class Game:
|
|||||||
self.rpc_log = []
|
self.rpc_log = []
|
||||||
self.is_replay = False
|
self.is_replay = False
|
||||||
self.replay_speed = 1
|
self.replay_speed = 1
|
||||||
self.owner: str | None = None
|
|
||||||
|
|
||||||
def shuffle_players(self):
|
def shuffle_players(self):
|
||||||
if not self.started:
|
if not self.started:
|
||||||
@ -255,7 +254,6 @@ class Game:
|
|||||||
"available_expansions": self.available_expansions,
|
"available_expansions": self.available_expansions,
|
||||||
"is_replay": self.is_replay,
|
"is_replay": self.is_replay,
|
||||||
"characters_to_distribute": self.characters_to_distribute,
|
"characters_to_distribute": self.characters_to_distribute,
|
||||||
"owner": self.owner,
|
|
||||||
},
|
},
|
||||||
)
|
)
|
||||||
G.sio.emit("debug", room=self.name, data=self.debug)
|
G.sio.emit("debug", room=self.name, data=self.debug)
|
||||||
@ -310,8 +308,6 @@ class Game:
|
|||||||
if player.is_admin():
|
if player.is_admin():
|
||||||
self.feature_flags()
|
self.feature_flags()
|
||||||
self.players.append(player)
|
self.players.append(player)
|
||||||
if len(self.players) == 1:
|
|
||||||
self.owner = player.name
|
|
||||||
if len(self.players) > 7:
|
if len(self.players) > 7:
|
||||||
if "dodge_city" not in self.expansions:
|
if "dodge_city" not in self.expansions:
|
||||||
self.expansions.append("dodge_city")
|
self.expansions.append("dodge_city")
|
||||||
@ -478,10 +474,6 @@ class Game:
|
|||||||
if p.get_discarded(attacker=attacker, card_name=card_name):
|
if p.get_discarded(attacker=attacker, card_name=card_name):
|
||||||
self.waiting_for += 1
|
self.waiting_for += 1
|
||||||
p.notify_self()
|
p.notify_self()
|
||||||
elif card_name == "Tornado" and len(p.hand) == 0:
|
|
||||||
self.deck.draw(player=p)
|
|
||||||
self.deck.draw(player=p)
|
|
||||||
p.notify_self()
|
|
||||||
if self.waiting_for == 0:
|
if self.waiting_for == 0:
|
||||||
attacker.pending_action = PendingAction.PLAY
|
attacker.pending_action = PendingAction.PLAY
|
||||||
attacker.notify_self()
|
attacker.notify_self()
|
||||||
@ -993,8 +985,6 @@ class Game:
|
|||||||
self.deck = None
|
self.deck = None
|
||||||
return True
|
return True
|
||||||
else:
|
else:
|
||||||
self.owner = next((p.name for p in self.players if not p.is_bot), None)
|
|
||||||
self.notify_room()
|
|
||||||
return False
|
return False
|
||||||
|
|
||||||
def player_death(self, player: pl.Player, disconnected=False):
|
def player_death(self, player: pl.Player, disconnected=False):
|
||||||
|
@ -1574,10 +1574,6 @@ class Player:
|
|||||||
self.game.deck.scrap(self.hand.pop(card_index), player=self)
|
self.game.deck.scrap(self.hand.pop(card_index), player=self)
|
||||||
self.mancato_needed -= 1
|
self.mancato_needed -= 1
|
||||||
else:
|
else:
|
||||||
if self.attacker and "gold_rush" in self.game.expansions and not self.is_ghost:
|
|
||||||
if isinstance(self.attacker, Player):
|
|
||||||
self.attacker.gold_nuggets += 1
|
|
||||||
self.attacker.notify_self()
|
|
||||||
self.lives -= 1
|
self.lives -= 1
|
||||||
self.mancato_needed = 0
|
self.mancato_needed = 0
|
||||||
if self.mancato_needed <= 0:
|
if self.mancato_needed <= 0:
|
||||||
@ -1872,8 +1868,7 @@ class Player:
|
|||||||
):
|
):
|
||||||
self.expected_response.append(cs.Bang(0, 0).name)
|
self.expected_response.append(cs.Bang(0, 0).name)
|
||||||
if self.character.check(self.game, chw.BigSpencer):
|
if self.character.check(self.game, chw.BigSpencer):
|
||||||
self.expected_response = self.game.deck.mancato_cards.copy()
|
self.expected_response = []
|
||||||
self.expected_response.remove(cs.Mancato(0, 0).name)
|
|
||||||
if any((isinstance(c, trt.Caboose) for c in self.equipment)):
|
if any((isinstance(c, trt.Caboose) for c in self.equipment)):
|
||||||
self.expected_response.append([c.name for c in self.equipment if not c.usable_next_turn])
|
self.expected_response.append([c.name for c in self.equipment if not c.usable_next_turn])
|
||||||
self.on_failed_response_cb = self.take_damage_response
|
self.on_failed_response_cb = self.take_damage_response
|
||||||
@ -1947,7 +1942,6 @@ class Player:
|
|||||||
self.choose_text = "choose_poker"
|
self.choose_text = "choose_poker"
|
||||||
if card_name == "Bandidos":
|
if card_name == "Bandidos":
|
||||||
self.choose_text = "choose_bandidos"
|
self.choose_text = "choose_bandidos"
|
||||||
self.attacker = attacker
|
|
||||||
self.mancato_needed = min(2, len(self.hand))
|
self.mancato_needed = min(2, len(self.hand))
|
||||||
self.available_cards.append(
|
self.available_cards.append(
|
||||||
{"name": "-1hp", "icon": "💔", "noDesc": True}
|
{"name": "-1hp", "icon": "💔", "noDesc": True}
|
||||||
|
@ -1,4 +1,4 @@
|
|||||||
certifi==2022.12.7
|
certifi==2024.7.4
|
||||||
dnspython==2.3.0
|
dnspython==2.3.0
|
||||||
eventlet==0.35.2
|
eventlet==0.35.2
|
||||||
python-engineio==4.3.4
|
python-engineio==4.3.4
|
||||||
|
@ -226,29 +226,6 @@ def test_bandidos():
|
|||||||
assert p1.pending_action == PendingAction.WAIT
|
assert p1.pending_action == PendingAction.WAIT
|
||||||
assert p.pending_action == PendingAction.PLAY
|
assert p.pending_action == PendingAction.PLAY
|
||||||
|
|
||||||
def test_bandidos_with_gold_rush():
|
|
||||||
g = Game('test')
|
|
||||||
g.expansions = ['gold_rush']
|
|
||||||
ps = [Player(f'p{i}', f'p{i}') for i in range(2)]
|
|
||||||
for p in ps:
|
|
||||||
g.add_player(p)
|
|
||||||
g.start_game()
|
|
||||||
for p in ps:
|
|
||||||
p.available_characters = [Character('test_char', 4)]
|
|
||||||
p.set_character(p.available_characters[0].name)
|
|
||||||
p = g.players[g.turn]
|
|
||||||
p1 = g.players[(g.turn+1)%3]
|
|
||||||
p.draw('')
|
|
||||||
p.hand = [Bandidos(0,0), Bandidos(0,0)]
|
|
||||||
p.play_card(0)
|
|
||||||
assert len(p.hand) == 1
|
|
||||||
assert p.pending_action == PendingAction.WAIT
|
|
||||||
assert p1.pending_action == PendingAction.CHOOSE
|
|
||||||
p1.choose(len(p1.hand))
|
|
||||||
assert p1.lives == 3
|
|
||||||
assert p.pending_action == PendingAction.PLAY
|
|
||||||
assert p.gold_nuggets == 1
|
|
||||||
|
|
||||||
# test Poker
|
# test Poker
|
||||||
def test_poker():
|
def test_poker():
|
||||||
g = Game('test')
|
g = Game('test')
|
||||||
|
@ -483,7 +483,6 @@ export default {
|
|||||||
fullScreenEffects: [],
|
fullScreenEffects: [],
|
||||||
showPopup: false,
|
showPopup: false,
|
||||||
selectedExpansionInfo: {},
|
selectedExpansionInfo: {},
|
||||||
owner: undefined,
|
|
||||||
}),
|
}),
|
||||||
sockets: {
|
sockets: {
|
||||||
expansion_info(data) {
|
expansion_info(data) {
|
||||||
@ -504,7 +503,6 @@ export default {
|
|||||||
this.togglable_expansions = data.available_expansions;
|
this.togglable_expansions = data.available_expansions;
|
||||||
this.expansions = data.expansions;
|
this.expansions = data.expansions;
|
||||||
this.is_replay = data.is_replay;
|
this.is_replay = data.is_replay;
|
||||||
this.owner = data.owner;
|
|
||||||
this.characters_to_distribute = data.characters_to_distribute;
|
this.characters_to_distribute = data.characters_to_distribute;
|
||||||
this.players = data.players.map((x) => {
|
this.players = data.players.map((x) => {
|
||||||
return {
|
return {
|
||||||
@ -731,7 +729,11 @@ export default {
|
|||||||
return "";
|
return "";
|
||||||
},
|
},
|
||||||
isRoomOwner() {
|
isRoomOwner() {
|
||||||
return this.owner === this.username;
|
if (this.players.length > 0) {
|
||||||
|
let pls = this.players.filter((x) => !x.is_bot);
|
||||||
|
return pls.length > 0 && pls[0].name == this.username;
|
||||||
|
}
|
||||||
|
return false;
|
||||||
},
|
},
|
||||||
startGameCard() {
|
startGameCard() {
|
||||||
if (!this.started && this.players.length > 2 && this.isRoomOwner) {
|
if (!this.started && this.players.length > 2 && this.isRoomOwner) {
|
||||||
|
@ -542,7 +542,7 @@
|
|||||||
},
|
},
|
||||||
"Fratelli Di Sangue": {
|
"Fratelli Di Sangue": {
|
||||||
"name": "Blood Brothers",
|
"name": "Blood Brothers",
|
||||||
"desc": "At the begin of their turn, players can lose 1 hp (except the last one) to give it to another player"
|
"desc": "At the begin of their turn, payers can lose 1 hp (except the last one) to give it to another player"
|
||||||
},
|
},
|
||||||
"I Dalton": {
|
"I Dalton": {
|
||||||
"name": "The Daltons",
|
"name": "The Daltons",
|
||||||
|
Loading…
Reference in New Issue
Block a user